package service

import (
	"context"
	"devops-super/internal/model/mymodel"
)

type IAlertOperate interface {
	// GetSceneListByPeople 根据联系人ID获取关联的告警场景列表
	GetSceneListByPeople(ctx context.Context, peopleId uint64) ([]*mymodel.AlertSceneResponse, error)
	// SetPeopleSceneRel 设置联系人关联的告警场景
	SetPeopleSceneRel(ctx context.Context, peopleId uint64, sceneIds []int64) error
	// GetPeopleListByScene 根据场景ID获取关联的联系人列表
	GetPeopleListByScene(ctx context.Context, sceneId int64) ([]*mymodel.AlertPeopleResponse, error)
	// SetScenePeopleRel 设置场景关联的联系人
	SetScenePeopleRel(ctx context.Context, sceneId int64, peopleIds []uint64) error

	// GetSceneListByDevice 根据设备ID获取关联的告警场景列表
	GetSceneListByDevice(ctx context.Context, deviceNo string) ([]*mymodel.AlertSceneResponse, error)
	// SetDeviceSceneRel 设置设备关联的告警场景
	SetDeviceSceneRel(ctx context.Context, deviceNo string, sceneIds []int64) error
	// GetDeviceListByScene 根据场景ID获取关联的设备列表
	GetDeviceListByScene(ctx context.Context, sceneId int64) ([]*mymodel.AppDeviceResponse, error)
	// SetSceneDeviceRel 设置场景关联的设备
	SetSceneDeviceRel(ctx context.Context, sceneId int64, deviceNos []string) error

	// GetSceneListByDeviceGroup 根据设备分组ID获取关联的告警场景列表
	GetSceneListByDeviceGroup(ctx context.Context, deviceGroupId uint64) ([]*mymodel.AlertSceneResponse, error)
	// SetDeviceGroupSceneRel 设置设备分组关联的告警场景
	SetDeviceGroupSceneRel(ctx context.Context, deviceGroupId uint64, sceneIds []int64) error
	// GetDeviceGroupListByScene 根据场景ID获取关联的设备分组列表
	GetDeviceGroupListByScene(ctx context.Context, sceneId int64) ([]*mymodel.AppDeviceGroupResponse, error)
	// SetSceneDeviceGroupRel 设置场景关联的设备分组
	SetSceneDeviceGroupRel(ctx context.Context, sceneId int64, deviceGroupIds []uint64) error
}

var (
	localAlertOperate IAlertOperate
)

func AlertOperate() IAlertOperate {
	if localAlertOperate == nil {
		panic("implement not found for interface IAlertOperate, forgot register?")
	}
	return localAlertOperate
}

func RegisterAlertOperate(i IAlertOperate) {
	localAlertOperate = i
}
